const int PinA = 13; const int PinB = 12; byte zub = 60; byte propusk = 2; byte schet = 0; long interval = 100000; byte PinAstatus = LOW; byte PinBstatus = LOW; long periudMicros = 0; byte zub_camchaft_high = 50; byte zub_camchaft_low = 3; void umulator_crankchaft () { unsigned long podschetMicros = micros(); if(podschetMicros - periudMicros > interval){ periudMicros = podschetMicros; if (PinAstatus == LOW && schet < zub - propusk){ PinAstatus = HIGH; } else if (PinAstatus == HIGH && schet < zub - propusk) { PinAstatus = LOW; schet ++; } else if (PinAstatus == LOW && schet <= zub) { PinAstatus = LOW; schet ++; } else { schet = 0; } } } void umulator_camkchaft() { if (schet == zub_camchaft_high){ PinBstatus = HIGH; } if (schet == zub_camchaft_low){ PinBstatus = LOW; } } void setup() { pinMode(PinA, OUTPUT); pinMode(PinB, OUTPUT); digitalWrite(PinA, LOW); digitalWrite(PinB, LOW); } void loop() { umulator_crankchaft(); umulator_camkchaft(); digitalWrite(PinA, PinAstatus); digitalWrite(PinB, PinBstatus); }